<?php
/*********************
 * User: Vitaly
 * Date: 16.05.12
 *********************/
class TagMapper
{

    private $connection; // хранит ссылку на singleton экземпляр DbServide

    function __construct()
    {
        $this->connection = DbService::instance();
    }

    // выполняет обработку тегов при публикации сообщения
    // преобразует теги в массив; проверяет, есть ли уже такие теги
    // связывает таблицу тегов и таблицу сообщений

    function attachTags($messageid, $tags)
    {
        $tags = explode(',', $tags);
        foreach($tags as &$tag)
        {
            $tag = strtolower(trim($tag));
            if(($row = $this->connection->fetchAssocOnce($this->connection->select("tags","`tag`='" . $tag . "'"))) != false)
            {
                $tagid = $row['id'];
            }
            else
            {
                $tagid = $this->connection->insert('tags', array("tag" => $tag));
            }
            $msgTagRel = array(
                "message" => $messageid,
                "tag"     => $tagid
            );
            $this->connection->insert('message_tag_rel', $msgTagRel);
        }
    }

    //добавляет массив всех тегов, соответствующих сообщению с id $message['id']

    function getTagsArray($msgId)
    {
        return $this->connection->fetchAssoc($this->connection->extSelect("*", "message_tag_rel`, `tags", "WHERE `message_tag_rel`.`tag` = `tags`.`id` AND `message` = " . $msgId));
    }
}
